package main

import (
	"fmt"
	"strings"
)

func simplifyPath(path string) string {
	rst := make([]string, 0)
	for i, j := -1, 0; j < len(path); j++ {
		// 1. 默认 文件名是夹在 两个 / 之间的， 但是最后末尾可能不是 /, 要这样判断， 获取全部正确文件名
		if path[j] != '/' {
			if j != len(path)-1 {
				continue
			}
			j += 1
		}
		// 2. 取当前路径名: go 语言中 不允许切片前面大于后面，会报错
		st := path[i+1 : j]
		i = j
		// 3. 对文件名做相应操作
		if st == "" || st == "." { // 空文件名 和 . 不做操作
			continue
		} else if st == ".." { // .. 若有上一级则删除上一级
			if len(rst) > 0 {
				rst = rst[:len(rst)-1]
			}
		} else { // 正确文件名，直接加入结果中
			rst = append(rst, st)
		}
	}
	// 4. 输出结果。 空rst， 返回 "/" 根目录
	if len(rst) == 0 {
		return "/"
	}
	return "/" + strings.Join(rst, "/")
}

func main() {
	rst := simplifyPath("/../")
	fmt.Println(rst)
}
